Passed
Push — master ( e9e2de...d6e7d5 )
by Jesús
02:07
created

display.ts ➔ updateWordDisplay   A

Complexity

Conditions 1

Size

Total Lines 4
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 4
dl 0
loc 4
rs 10
c 0
b 0
f 0
1
import { state } from '../../bip39';
2
import { elements } from '../../bip39';
3
import { getAllDisplayData } from '../application/displayService';
4
5
export function updateDisplay(): void {
6
  const displayData = getAllDisplayData(state.boxes);
7
8
  updateBoxStates(displayData.boxes);
9
  updateBinaryDisplay(displayData.binary);
10
  updateWordDisplay(displayData.word);
11
  syncWordInputFromBoxes();
12
}
13
14
// Callback for syncing word input (set by wordInput module to avoid circular dependency)
15
let syncWordInputCallback: (() => void) | null = null;
16
17
export function setSyncWordInputCallback(callback: () => void): void {
18
  syncWordInputCallback = callback;
19
}
20
21
function syncWordInputFromBoxes(): void {
22
  if (syncWordInputCallback) {
23
    syncWordInputCallback();
24
  }
25
}
26
27
function updateBoxStates(boxesData: Array<{ isActive: boolean; isDisabled: boolean; ariaPressed: string }>): void {
28
  const boxElements = elements.grid.querySelectorAll('.box');
29
30
  boxElements.forEach((box, index) => {
31
    const htmlBox = box as HTMLButtonElement;
32
    const data = boxesData[index];
33
34
    // Update active state
35
    htmlBox.classList.toggle('active', data.isActive);
36
    htmlBox.setAttribute('aria-pressed', data.ariaPressed);
37
38
    // Update disabled state
39
    htmlBox.classList.toggle('disabled', data.isDisabled);
40
    htmlBox.dataset.isDisabled = data.isDisabled.toString();
41
    htmlBox.setAttribute('aria-disabled', data.isDisabled.toString());
42
  });
43
}
44
45
function updateBinaryDisplay(binaryData: { binaryString: string }): void {
46
  elements.binary.textContent = binaryData.binaryString;
47
}
48
49
function updateWordDisplay(wordData: { indexText: string; announcement: string }): void {
50
  elements.index.textContent = wordData.indexText;
51
  announceToScreenReader(wordData.announcement);
52
}
53
54
function announceToScreenReader(message: string): void {
55
  const announcer = document.getElementById('sr-announcements');
56
  if (announcer) {
57
    announcer.textContent = message;
58
    // Clear after a short delay to allow for new announcements
59
    setTimeout(() => {
60
      announcer.textContent = '';
61
    }, 1000);
62
  }
63
}
64